#!/bin/bash

#----------------------------基础知识----------------------------

# -n 只显示被改变的行

# -i 更改源文件 
# sed 's/pattern/replace_string/' file
# sed -i 's/pattern/replace_string/' file


# /g 意味着 sed 会替换每一处匹配
# sed -i 's/pattern/replace_string/g' file

# 从第n处匹配开始替换
echo thisthisthisthis | sed 's/this/THIS/2g'
echo thisthisthisthis | sed 's/this/THIS/3g'
echo thisthisthisthis | sed 's/this/THIS/4g'

# /pattern/d 会移除匹配样式的行
# 移除空白行
# sed '/^$/d' file


# \b 匹配开头或结尾
cat <<EOF >sed_data.txt 
11 abc 111 thi222s 9 333file contains555 111 11 88 numbers 0000
EOF
# sed -i 's/\b[0-9]\{3\}\b/ZZZ/g' sed_data.txt
sed 's/\b[0-9]\{3\}\b/ZZZ/g' sed_data.txt # 只能匹配 单纯的3个数字 
rm -rf ./sed_data.txt

# 子串匹配标记  \1 \2 ...
echo this is digit 7 in a number | sed 's/digit \([0-9]\)/\1/' 
# 将digit 7匹配为7
echo seven EIGHT | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/' 
# 第一个被标记为 \1 第二个被标记为\2

# 利用管道组合多个 sed 命令
# sed 'expression' | sed 'expression'
#   等价于
# sed 'expression; expression' 
#   等价于
# sed -e 'expression' -e 'expression'
echo abc | sed 's/a/A/' | sed 's/c/C/'
echo abc | sed 's/a/A/ ; s/c/C/'
echo abc | sed -e 's/a/A/' -e 's/c/C/'

# sed 表达式通常用单引号来引用。不过也可以使用双引号
# 双引号会通过对表达式求值来对其进行扩展。
# 当我们想在 sed 表达式中使用一些变量时，双引号就能派上用场了。
text=hello
echo hello world | sed "s/$text/HELLO/"




#----------------------------实战演练----------------------------
# 4.8.2







